package com.sdu.shanyimisapi.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import com.sdu.shanyimisapi.common.R;
import com.sdu.shanyimisapi.controller.form.LoginForm;
import com.sdu.shanyimisapi.service.MisUserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * @author lihaopeng
 * @version 1.0
 * @project shanyi-mis-api
 * @description MIS端用户
 * @since 2024/4/13 12:25
 */
@RestController
@RequestMapping("/mis_user")
public class MisUserController {

    @Resource
    private MisUserService misUserService;

    /**
     * 登录
     * 注解@RequestBody用于提取请求体中的数据，将其绑定到form上
     * 注解@Valid用于做后端验证，验证form中的数据是否符合要求
     *
     * @param form
     * @return
     */
    @PostMapping("/login")
    public R login(@RequestBody @Valid LoginForm form) {
        Map param = BeanUtil.beanToMap(form);
        Integer userId = misUserService.login(param);
        if (userId != null) { // 登录成功
            StpUtil.login(userId);
            String token = StpUtil.getTokenValue();
            List<String> permissions = StpUtil.getPermissionList();
            return R.ok().put("result", true)
                    .put("token", token)
                    .put("permissions", permissions);
        }
        return R.ok().put("result", false);
    }

    @GetMapping("/logout")
    @SaCheckLogin // 验证是否登录
    public R logout() {
        // Sa-Token框架会将Redis中缓存的该用户的token删除
        // 该方法执行时，会去HTTP请求头中获取token，然后去Redis中找有没有这个token，有的话就删除
        StpUtil.logout();
        return R.ok();
    }
}
